---@class GT.ui.scene 场景ui
---@field scene SceneNode 场景ui
GT.ui.scene = class()

---@generic T
---@class ui_scene_data
---@field scene SceneNode 场景ui
---@field ui `T` 控件ui

--- 场景ui
---@param data ui_scene_data
---@return GT.ui.scene
function GT.ui.scene:ctor(data)
    self.scene=data.scale
    self.ui=data.ui
    
end

-- local text= GT.ui.control.label.obj{
--     x = 100,
--     y = 100,
--     size = { h = 50, w = 0 },
--     text="123123123"
-- }
-- local aa= GT.ui.scene.create_point(text, GT.point.vec3(0, 0, 0) , 1000, 200)
-- local sc= GT.ui.scene.create_unit(text, GT.player.get_loc_player(), GT.unit.get_unit_by_id(1), "sound", 99999)

---转对象
---@param data ui_scene_data
---@return GT.ui.scene
function GT.ui.scene.obj(data)
    return new(GT.ui.scene, data)
end

--- 创建场景点并绑定UI到点
---@param comp_name GT.ui 控件uid
---@param point GT.point 点
---@param visible_dis Int32 可见距离
---@param height_offset Float 离地高度
---@param control any 控件对象
---@return GT.ui.scene
function GT.ui.scene.create_point(comp_name,point,visible_dis,height_offset,control)
    local scene=game_api.create_scene_node_on_point(comp_name.uid,point.point,visible_dis,height_offset)
    local ui=GT.ui.scene.get_ui(scene,control,ui.uid)
    return GT.ui.scene.obj({
        scene=scene,
        ui=ui
    })
end

--- 创建场景点并绑定UI到单位
---@param ui GT.ui ui类型
---@param player GT.player 玩家
---@param unit GT.unit 单位
---@param socket_name Str 挂接点
---@param visible_dis Int32 可见距离
---@param control any 控件对象
---@return GT.ui.scene
function GT.ui.scene.create_unit(ui,player,unit,socket_name,visible_dis,control)
    local scene=game_api.create_scene_node_on_unit(ui.uid,player.player,unit.unit,socket_name,visible_dis or 9999)
    local ui=GT.ui.scene.get_ui(scene,control,ui.uid)
    return GT.ui.scene.obj({
        scene=scene,
        ui=ui
    })

end

--- 设置场景点对玩家的可见距离
---@param player GT.player 玩家
---@param visible_dis Int32 可见距离
function GT.ui.scene:set_visible_dis(visible_dis)
    game_api.set_scene_node_visible_distance(self.scale,player.player,visible_dis)
end

--- 删除场景点
function GT.ui.scene:del()
    game_api.delete_scene_node(self.scene)
end

---获取场景UI中的控件
---@param control control 控件对象
---@param str GT.ui
---@return control
function GT.ui.scene.get_ui(scene,control,str)
    return game_api.get_ui_comp_in_scene_ui(self.scene,str.uid)
end

---@generic T
---获取场景UI中的控件
---@param control T 控件对象
---@param str GT.ui
---@return T
function GT.ui.scene:get_ui(control,str)
    local data={
       uid= game_api.get_ui_comp_in_scene_ui(self.scene,str.uid)
    }
    return new(control, data)
end


